﻿Imports System.Data
Imports System.Text
Imports System.IO

Imports System.Collections.ObjectModel   

Public Class CLiquidezServicio
    
Private  RUTAARCHIVO As String 
  
Public Sub CargarParametrosLiquidez(ByRef rutaArchivo As String, ByRef nomArchivo As String, ByRef comandoTLoader As String, ByRef paramCom As String  )

   Dim serGral as new  CServiciosGenerales 
   
     
   nomArchivo       = serGral .ObtenerPREFIJOARCHIVO &  CServicioLocalSQLServerDB.ObtenerNombreArchivoLiquidez  ()
   rutaArchivo      = CServicioLocalSQLServerDB.ObtenerRutaArchivoLiquidez ()    
   comandoTLoader   = CServicioLocalSQLServerDB.ObtenerNombreComandoTLoader ()  

   paramCom         = CServicioLocalSQLServerDB.ObtenerParamComandoTLoaderLiq() 

End Sub
    
Public Sub CargarParametrosPorvenir(ByRef rutaArchivo As String, ByRef nomArchivo As String, ByRef comandoTLoader As String, ByRef paramCom As String )
  Dim serGral as new  CServiciosGenerales 
   
   nomArchivo       = serGral .ObtenerPREFIJOARCHIVO &  CServicioLocalSQLServerDB.ObtenerNombreArchivoPorvenir()
   rutaArchivo      = CServicioLocalSQLServerDB.ObtenerRutaArchivoLiquidez ()    
   comandoTLoader   = CServicioLocalSQLServerDB.ObtenerNombreComandoTLoader()  

   paramCom         = CServicioLocalSQLServerDB.ObtenerParamComandoTLoaderPorv ()

End Sub
    


Public Function Refrescar(ByRef lstFondos As ObservableCollection (Of CFondo)) As List(Of CFondoIntermediario)
'Dim lstFondosInter        As New List(Of CFondoIntermediario)

'Dim dtFondoSalDiso        As New DataTable()
'Dim dtOrdenesPend         As New DataTable()
'Dim dtPendingCashAndAjust As New DataTable()

'Dim strTipoActMinus       As String = "PE-"
'Dim strTipoActPlus        As String = "PE+"

'Dim fechaHoy              As Date
'Dim fechasig              As Date 


'Dim idRegBit              As Integer  



'Dim servicioGral As New CServiciosGenerales() 


'   '1) Se obtiene la fecha actual y la del día siguiente hábil

'   Try
'     idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir-Saldos","Refresh","Obtención de fecha del servidor de BD")

'         fechaHoy  = CServiciosMacrosSyBaseDB.FechaHoyDB ()
'         fechasig  = servicioGral.ObtenerSigFechaNoLab (fechaHoy,servicioGral.ObtenerFechasNoLab(1)) '1 = a la funcion liquidez
     
'     CUtileria.CompletarRegBitacora (idRegBit)
'   Catch ex As Exception
'       idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir-Saldos","Refresh",ex.Message )
'       CUtileria.CompletarRegBitacora (idRegBit)
'       Throw ex
'   End Try




'   '2) Se Obtiene el Saldo de los fondos
'    Try
'       idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir-Saldos","Refresh","Consulta de saldos")
'         dtFondoSalDiso = CServiciosMacrosSyBaseDB.FondosSalLiquidezDB(lstFondos)
'       CUtileria.CompletarRegBitacora (idRegBit)
'    Catch ex As Exception
'        idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir-Saldos","Refresh",ex.Message )
'        CUtileria.CompletarRegBitacora (idRegBit)
'        Throw ex
'    End Try




'    '3) Se obtiene las ordenes pendientes 

'    Dim ColumnaClavesOrd(0) As DataColumn
'    Try
'       idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir-Saldos","Refresh","Consulta de ordenes pending  ")
'           dtOrdenesPend = CServiciosMacrosSyBaseDB.OrdenesPendLiquidezDB(lstFondos)
'           ColumnaClavesOrd(0) = dtOrdenesPend.Columns("PFCOD")
'           dtOrdenesPend.PrimaryKey = ColumnaClavesOrd
'       CUtileria.CompletarRegBitacora (idRegBit)

'    Catch ex As Exception
'       idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir-Saldos","Refresh",ex.Message )
'       CUtileria.CompletarRegBitacora (idRegBit)
'       Throw ex
'    End Try




'    '4) Se obtiene el pending-cash-ajust

'    Dim ColumnaClaves(1) As DataColumn
'    Try
'       idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir-Saldos","Refresh","Consulta pending-cash-ajust")

'          dtPendingCashAndAjust = CServiciosMacrosSyBaseDB.PendingCashAndAjustDB(lstFondos)
'          ColumnaClaves(0) = dtPendingCashAndAjust.Columns("PF_COD")
'          ColumnaClaves(1) = dtPendingCashAndAjust.Columns("XACT_TYP")
'          dtPendingCashAndAjust.PrimaryKey = ColumnaClaves
    
'       CUtileria.CompletarRegBitacora (idRegBit)       
    
'    Catch ex As Exception
'       idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir-Saldos","Refresh",ex.Message )
'       CUtileria.CompletarRegBitacora (idRegBit)
'      Throw ex
'    End Try



    

'     Dim registro             As DataRow
'     Dim dblSaldo             As Double = 0.0
'     Dim dblPendingCash       As Double = 0.0
'     Dim dblPendingCashAjust  As Double = 0.0
'     Dim dblOrdPend           As Double = 0.0
'     Dim dblSalDecalog        As Double = 0.0


'     lstFondosInter.Clear()



'    Try

'    idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir-Saldos","Refresh","Barrido de fondos")
'     For Each registro In dtFondoSalDiso.Rows
'             Dim valores(1) As Object
'             Dim registrosMinus As DataRow
'             Dim registrosPlus As DataRow
'             Dim registroOrd As DataRow



'             'Busqueda de registros
'             valores(0) = registro.Item("fondo")
'             valores(1) = strTipoActMinus
'             registrosMinus = dtPendingCashAndAjust.Rows.Find(valores)

'             valores(1) = strTipoActPlus
'             registrosPlus = dtPendingCashAndAjust.Rows.Find(valores)

'             registroOrd = dtOrdenesPend.Rows.Find(registro.Item("fondo"))


'             'Validación en caso de no encontrar

'             If Not registro.Item("saldo") Is Nothing Then
'                 dblSaldo = registro.Item("saldo")
'             End If


'             If Not registrosMinus Is Nothing Then
'                 dblPendingCash = registrosMinus.Item("SALDOSPLUSMINUS")
'             End If

'              If Not registrosPlus Is Nothing Then
'                 dblPendingCashAjust = registrosPlus.Item("SALDOSPLUSMINUS")
'             End If


'              If Not registroOrd Is Nothing Then
'                 dblOrdPend = registroOrd.Item("ORDREPO")
'             End If


'             'PENDIENTE: VALIDAR SI registro.Item("saldo") puede ser NULL
'             dblSalDecalog = registro.Item("saldo") - dblOrdPend + dblPendingCash + dblPendingCashAjust


'             lstFondosInter.Add(New CFondoIntermediario(registro.Item("fondo"), dblSaldo, dblOrdPend, dblPendingCash, dblPendingCashAjust, dblSalDecalog, fechaHoy.ToShortDateString,fechasig.ToShortDateString ))

'             dblSaldo = 0.0
'             dblPendingCash = 0.0
'             dblPendingCashAjust = 0.0
'             dblOrdPend = 0.0
'             dblSalDecalog = 0.0

'         Next

'         CUtileria.CompletarRegBitacora (idRegBit)

'    Catch ex As Exception         
'        idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir-Saldos","Refresh","Consulta pending-cash-ajust")
'        CUtileria.CompletarRegBitacora (idRegBit)
'        Throw ex
'    End Try



    
   Return Nothing 


End Function

Public Function GenerarArchivoFondeo(ByVal ColIntermediario As Integer, ByRef lstFondoInter As List(Of CFondoIntermediario), ByVal nombreArchivo As String, ByVal rutaArchivo As String, ByRef nombreArchivoSalida As String, ByVal fechaHoy As String, ByVal fechasig As String, ByVal opcion As CDefinicionesGrales.TiposFondo  ) As Integer

Dim dt     As DataSet
Dim dr     As DataRow()
Dim filtro As String


Dim cabecera As New System.Text.StringBuilder
Dim valores  As New System.Text.StringBuilder


Dim i As Integer

Dim idRegBit As Integer  
Dim moduloBit As String = ""

  Try

    Select Case opcion 
      
      Case CDefinicionesGrales.TiposFondo.FondoLiquidez   
           moduloBit = "Liquidación"
      Case CDefinicionesGrales.TiposFondo.FondoPorvenir 
           moduloBit = "Porvenir"
    End Select

    idRegBit =  CUtileria.GrabarBitacora (moduloBit,"Fondeo-GenArchivo","Generación del archivo que se envía al T-Loader para el intermediario: " & (ColIntermediario - CFondoIntermediario.INDEXINICIOINTERMEDIARIO  + 1 ))
    
    

    dt = CServiciosMacrosSyBaseDB.LayoutLiquidezXML(nothing)

    'Cabecera inicial

        filtro = "tipo='1'"
        dr = dt.Tables.Item(0).Select(filtro)

        For i = 0 To dr.Count - 1
            cabecera.Append(dr(i).Item("header").ToString())
            cabecera.Append(",")

          

            If dr(i).Item("valor").ToString().Equals("##") Then
               valores.Append(fechaHoy)
            Else

                 If dr(i).Item("header").ToString().Equals ("ORDR_BLOCK_PF") and opcion = CDefinicionesGrales.TiposFondo.FondoPorvenir      then 'DISTINCIÓN ENTRE LA MACRO DE LIQUIDEZ Y PORVENIR
                      valores.Append("PORVENIR")  
                  else
                      valores.Append(dr(i).Item("valor").ToString())
                 End If               
            End If

            valores.Append(",")
        Next


   'Detalle

        filtro = "tipo='2'"
        dr = dt.Tables.Item(0).Select(filtro)

        Dim lstDetalle As New List(Of CFondoIntermediario)
        lstDetalle = lstFondoInter.FindAll(Function(x)  x.Columna(ColIntermediario) > 0 )

        If lstDetalle.Count <= 0 Then
           nombreArchivoSalida = ""
           Return -1
        End If


        For i = 0 To lstDetalle.Count - 1

           cabecera.Append(dr(0).Item("header").ToString())
           cabecera.Append(",")

           cabecera.Append(dr(1).Item("header").ToString())
           cabecera.Append(",")

           cabecera.Append(dr(2).Item("header").ToString())
           cabecera.Append(",")


           valores.Append(dr(0).Item("valor").ToString())
           valores.Append(",")

           valores.Append(lstDetalle(i).CodFondo)   'Fondo 
           valores.Append(",")

           valores.Append(lstDetalle(i).Columna(ColIntermediario)) 'Importe
           valores.Append(",")

        Next


     'Cabecera Final

        filtro = "tipo='3'"
        dr = dt.Tables.Item(0).Select(filtro)

        For i = 0 To dr.Count - 1
            cabecera.Append(dr(i).Item("header").ToString())
            cabecera.Append(",")

            If dr(i).Item("valor").ToString().Equals("##") Then
               valores.Append(fechasig )
            Else
               valores.Append(dr(i).Item("valor").ToString())
            End If
            valores.Append(",")

        Next

        cabecera.Remove(cabecera.Length - 1, 1)
        valores.Remove(valores.Length - 1, 1)

        dt.Clear()


       'Crear el archivo 

       Dim nombreArchivoCompleto As String = nombreArchivo & Today.Day & Today.Month & Today.Year & Date.Now.Hour & Date.Now.Minute & Date.Now.Second & ".csv"

       

       Using sw As StreamWriter = File.CreateText(rutaArchivo & nombreArchivoCompleto)
           sw.WriteLine(cabecera.ToString())
           sw.WriteLine(valores.ToString())
           sw.Close()
       End Using


       nombreArchivoSalida = nombreArchivoCompleto


       CUtileria.CompletarRegBitacora (idRegBit)     

       Return 0

Catch ex As Exception

   idRegBit =  CUtileria.GrabarBitacora (moduloBit,"Fondeo-GenArchivo","Error en generación del archivo para el intermediario: " & (ColIntermediario - CFondoIntermediario.INDEXINICIOINTERMEDIARIO  + 1 ) & ex.Message )
   CUtileria.CompletarRegBitacora (idRegBit)
   nombreArchivoSalida = ""
   Throw ex
End Try


  Return 0

End Function

public function ObtenerImporteTotal(ByVal colIntermediario As Integer, byRef miLista As List(Of CFondoIntermediario) )  as double
    
    Dim i As Integer     
    Dim sumaTotal As Double = 0.0
    Dim lstDetalle As new List(Of CFondoIntermediario )

    Try
        lstDetalle = miLista.FindAll (Function (x)  not x (colIntermediario).ToString.Trim().Equals (""))
                                                    
        For i = 0 to lstDetalle.Count - 1
             sumaTotal +=   Convert.ToDouble  (lstDetalle(i)(colIntermediario))
        Next

        Return sumaTotal 
    Catch ex As Exception
        Throw ex 
    End Try
    
End Function

Public function EjecutarProceso (ByVal comando As String, ByVal argumentos As String  ) As Boolean 

        Dim proceso As New Process()


        Dim idRegBit As Integer  


        Try
            proceso.EnableRaisingEvents = True
            proceso.StartInfo.FileName = comando
            proceso.StartInfo.Arguments = argumentos
            proceso.Start()
            idRegBit = CUtileria.GrabarBitacora("Liquidación-Porvenir", "T-Loader", "Se envía el archivo al T-Loader, proceso ID: " & proceso.Id)
            proceso.Close ()                         
            CUtileria.CompletarRegBitacora (idRegBit)  
            
            Return True  

        Catch ex As Exception
             idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir","T-Loader",ex.Message )
             CUtileria.CompletarRegBitacora (idRegBit)  
             Return false
        End Try

    
End Function 

Public Function ObtenerFondos(ByVal tipo As CDefinicionesGrales.TiposFondo) As ObservableCollection(Of CFondo)

Dim dt As DataTable     
Dim lst As new ObservableCollection(Of CFondo )
 
 Try
    dt = CServicioLocalSQLServerDB.ObtenerFondo (tipo) 
    
    For Each registro As DataRow  In dt.Rows           
       lst.Add(New CFondo (registro("ID"),registro ("TIPO")))         
    Next
             
 Catch ex As Exception
     Throw ex
 End Try

 Return lst

End Function




Public Function ObtenerRegistrosBitFoliosDec(ByVal fechaIni As DateTime, ByVal fechaFin As DateTime, ByVal hayCondicion As Boolean) As ObservableCollection(Of CBitFolioDec )
 
Dim dt As DataTable     
Dim lst As new ObservableCollection(Of CBitFolioDec )
 
 Try
    dt = CServicioLocalSQLServerDB.ObtenerRegFoliosDec(fechaIni.ToString , fechaFin.ToString ,hayCondicion )
    
    For Each registro As DataRow  In dt.Rows           
       lst.Add(New CBitFolioDec  (registro))         
    Next
             
 Catch ex As Exception
     Throw ex
 End Try

 Return lst

 
End Function

Public sub ActualizarRespdecalog(ByRef num_PENDIENTE As Integer, ByRef num_PROCESADO As Integer,ByRef num_INCORRECTO As Integer ) 
 
Dim dt As DataTable     
Dim lst As new ObservableCollection(Of CBitFolioDec )

Dim sMsgError As String = ""
Dim folioDec  As String = ""

 
Dim idRegBit As Integer 


 Try
    dt = CServicioLocalSQLServerDB.ObtenerRegFoliosDecXEstatus (CBitFolioDec.estatusFolioDec.PENDIENTE)
    

    For Each registro As DataRow  In dt.Rows           
        
      Select case  ValidarEjecucionTLoader(RUTAARCHIVO,registro("NOM_ARCHIVO"))    

         Case CBitFolioDec.estatusFolioDec.PENDIENTE 
            
            num_PENDIENTE += 1

            idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir","ActualizarRespDECalog"," No se encontró el archivo: " & registro("NOM_ARCHIVO") & " u ocurrió un error inesperado.")
            CUtileria.CompletarRegBitacora (idRegBit)


         Case CBitFolioDec.estatusFolioDec.PROCESADO_CORRECTO 
               folioDec = ObtenerFolioDecalogArchivo(RUTAARCHIVO,registro("NOM_ARCHIVO"))       
               ActualizarEstatusFolioDecalog(registro("NOM_ARCHIVO"),CBitFolioDec.estatusFolioDec.PROCESADO_CORRECTO,folioDec, sMsgError) 
               
                If folioDec.Trim.Equals ("") then 
                    idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir","ActualizarRespDECalog"," El archivo: " & registro("NOM_ARCHIVO") & " se proceso correctamente, pero no se pudo obtener el folio Decalog")
                    CUtileria.CompletarRegBitacora (idRegBit)                    
                End If
               
                num_PROCESADO += 1

               folioDec = ""
               sMsgError = ""

         Case CBitFolioDec.estatusFolioDec.PROCESADO_INCORRECTO 
              folioDec = ObtenerFolioDecalogArchivo(RUTAARCHIVO,registro("NOM_ARCHIVO"))       
              ActualizarEstatusFolioDecalog(registro("NOM_ARCHIVO"),CBitFolioDec.estatusFolioDec.PROCESADO_INCORRECTO ,folioDec, sMsgError) 

              idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir","ActualizarRespDECalog"," El archivo: " & registro("NOM_ARCHIVO") & " se proceso Incorrectamente. ")
              CUtileria.CompletarRegBitacora (idRegBit)              


               num_INCORRECTO += 1

               folioDec = ""
               sMsgError = ""

      End Select
                   
    Next
             

 Catch ex As Exception
     Throw ex
 End Try
 
End sub

Public Function ObtenerRegistrosBitacora(ByVal fechaIni As DateTime, ByVal fechaFin As DateTime, ByVal hayCondicion As Boolean) As ObservableCollection(Of CRegistroBitacora)
 
Dim dt As DataTable     
Dim lst As new ObservableCollection(Of CRegistroBitacora )
 
 Try
    dt = CServicioLocalSQLServerDB.ObtenerRegistrosBit (fechaIni.ToString , fechaFin.ToString ,hayCondicion )
    
    For Each registro As DataRow  In dt.Rows           
       lst.Add(New CRegistroBitacora(registro))         
    Next
             
 Catch ex As Exception
     Throw ex
 End Try

 Return lst

 
End Function



Public Function ValidarEjecucionTLoader(ByVal rutaArchivo  As String, ByVal archivoProc As String) As CBitFolioDec.estatusFolioDec  

  Dim infoTLOK      As System.IO.FileInfo
  Dim infoTLERRText As System.IO.FileInfo

  Dim archivoTLOK      As String  =  rutaArchivo & archivoProc & ".tl.ok"
  Dim archivoTLERRText As String  =  rutaArchivo & archivoProc & ".tl.err_text" 
  Dim archivoFolDec    As String  =  rutaArchivo & archivoProc & ".tl.ok_text"


  Dim idRegBit As Integer  


  Try

      If  My.Computer.FileSystem.FileExists (archivoTLOK) and My.Computer.FileSystem.FileExists (archivoTLERRText) then 

           infoTLOK = My.Computer.FileSystem.GetFileInfo(archivoTLOK)
           infoTLERRText = My.Computer.FileSystem.GetFileInfo(archivoTLERRText)

           If infoTLERRText.Length  = 0 and  infoTLOK.Length <> 0 then 
              Return CBitFolioDec.estatusFolioDec.PROCESADO_CORRECTO  
           else
              Return CBitFolioDec.estatusFolioDec.PROCESADO_INCORRECTO 
           End If

      else

          Return CBitFolioDec.estatusFolioDec.PENDIENTE 

      End If
           

  Catch ex As Exception
     idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir","ValidarEjecucionTLoader","Error al validar la respuesta del T-Loader: " & ex.Message)
     CUtileria.CompletarRegBitacora (idRegBit)
     Return CBitFolioDec.estatusFolioDec.PENDIENTE 
  End Try
  
End Function




Public Function ObtenerFolioDecalogArchivo(ByVal rutaArchivo  As String, ByVal archivoProc As String) As String
Dim datos As String 
Dim folio As String = ""
Dim inicioIdx As Integer 
Dim finIdx As Integer 

Dim extension As String = ".tl.ok_text"

Dim idRegBit As Integer  

Try

    Using sw As StreamReader  = File.OpenText (rutaArchivo & archivoProc & extension )
       datos = sw.ReadLine()     
       sw.Close()
    End Using

    inicioIdx = datos.IndexOf ("=")
    finIdx = datos.IndexOf ("(")

    If inicioIdx > 0 and finIdx > 0 then 
       folio =  datos.Substring (inicioIdx + 1,finIdx-inicioIdx-1).Trim () 
    End If 
    
    return folio 
Catch ex As Exception

   idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir","ObtenerFolioDecalog","Error al obtener folio Decalog: " & ex.Message)
   CUtileria.CompletarRegBitacora (idRegBit)

   Return ""
End Try

End Function

Public Function GuardarFolioDecBit(ByRef folioBit As CBitFolioDec, ByRef sMsgError As String ) As Boolean 
    
Dim idRegBit As Integer  
     
  if CServicioLocalSQLServerDB.darDeAltaFolioDecalog  (folioBit,sMsgError) = True then 
    Return True 
  Else      
    
     idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir","GuardarFolioDecBit","Error al guardar el folio Decalog: " & sMsgError)     
     CUtileria.CompletarRegBitacora (idRegBit)
     Return False 
  End If

End Function

Public Function ActualizarEstatusFolioDecalog(ByVal nomArchivo As String, ByVal nuevoEstatus As CBitFolioDec.estatusFolioDec, ByVal folioDecalog As String, ByRef sMsgError As String ) As Boolean 
    
Dim idRegBit As Integer  
     
  if CServicioLocalSQLServerDB.ActualizarFolioEstatusDecalog (nomArchivo,nuevoEstatus,folioDecalog,sMsgError) = True then 
    Return True 
  Else      
    
     idRegBit =  CUtileria.GrabarBitacora ("Liquidación-Porvenir","ActEstatusFolioDecalog","Error al actualizar el estatus-folioDecalog para el archivo:  " & nomArchivo & ". " & sMsgError)     
     CUtileria.CompletarRegBitacora (idRegBit)
     Return False 
  End If

End Function




Public Function GuardarFondoNuevo(ByRef fondoNuevo As CFondo, ByRef opcion As CDefinicionesGrales.TiposFondo ) As Boolean
 
 Dim sMsgError As String = ""
     
 if CServicioLocalSQLServerDB.DarDeAltaFondo (fondoNuevo,sMsgError ) = True then 
    Return True 
 Else      
   Throw New Exception (sMsgError )
 End If

End Function

Public Function ActualizarFondo(ByRef fondoActual As CFondo, ByRef fondoCambio As CFondo ) As Boolean
 
  Dim sMsgError As String = ""

  If CServicioLocalSQLServerDB.ActualizarFondo (fondoActual,fondoCambio,sMsgError ) = True then 
     Return True     
  else
     Throw New Exception (sMsgError)
  End If

 
End Function

Public Function EliminarFondo(ByRef fondoActual As CFondo) As Boolean 

  Dim sMsgError As String = ""

  If CServicioLocalSQLServerDB.EliminarFondo (fondoActual,sMsgError ) = True then 
        Return True
   Else
       Throw New Exception (sMsgError)     
  End If
       
End Function



Public Function AltaFechaNoLab(ByVal fecha As Date, ByRef sMsgError As String) As Boolean 

      Dim sFecha As String = fecha.ToString("yyyy-MM-dd")
      Return  CServicioLocalSQLServerDB.DarDeAltaFechaNoLabLiqPorv(sfecha,sMsgError)  

End Function

Public Function ActualizarFechaNoLab(ByVal fechaAct As Date, fechaNva As Date, ByRef sMsgError As String) As Boolean 

      Dim sFechaAct As String = fechaAct.ToString("yyyy-MM-dd")
      Dim sFechaNva As String = fechaNva.ToString("yyyy-MM-dd")

      Return  CServicioLocalSQLServerDB.ActualizarFechaNoLabLiqPorv(sFechaAct,sFechaNva, sMsgError)  

End Function

Public Function EliminarFechaNoLab(ByVal fechaAct As Date, ByRef sMsgError As String) As Boolean 

      Dim sFechaAct As String = fechaAct.ToString("yyyy-MM-dd")    
      Return  CServicioLocalSQLServerDB.EliminarFechaNoLabLiqPorv (sFechaAct,sMsgError)  

End Function

Public Function EliminacionMasivaDeFechasNoLab(ByRef lstFechasNolab As Object, ByRef sMsgError As String) As Boolean 
Dim sParametros As String = "" 
 
   For Each fecha As CFechaNoLab In lstFechasNolab 
       sParametros &=  "'" & fecha.Fechanolab.ToString("yyyy-MM-dd")  & "',"
   Next
   sParametros = sParametros.Remove (sParametros.Count-1,1)
 
  If CServicioLocalSQLServerDB.EliminarFechaNoLabLiqPorvMasiva (sParametros,sMsgError) = True  then 
      Return True 
  Else 
     Return false
  End If
  
End Function

Public Function  CargaMasivaFechasNoLab(ByRef lstFechasCargaParam As List(Of CFechaNoLab ), ByRef sMsgError As String ) As Integer 
Dim servGral       As new CServiciosGenerales ()
Dim negocio        As New CLiquidezServicio ()


Dim lstFechasCarga As List(Of CFechaNoLab ) = lstFechasCargaParam 
Dim lstDbFechas    As List(Of CFechaNoLab )
Dim lstFechasAux   As List(Of CFechaNoLab )



Dim i         As Integer 

Dim incorrectos As Integer = 0


   Try
         Dim ArrFechasAux(lstFechasCarga.Count - 1) As CFechaNoLab 

         lstFechasCarga.CopyTo (ArrFechasAux)
         lstFechasAux = ArrFechasAux.ToList 
         lstDbFechas  =  servGral.ObtenerFechasNoLab(1)
      
     
         If lstDbFechas.Count > 0 then 
         
             For i = 0 to lstFechasCarga.Count - 1
                   
                    if lstDbFechas.FindAll(Function(x) x.Fechanolab.Equals(lstFechasCarga(i).Fechanolab)).Count > 0 then 
                          lstFechasAux.Remove(lstFechasCarga(i))
                    End If            
              Next
         
         
         End If

        '2) Grabar en la Base de datos

         For i = 0 to lstFechasAux.Count - 1

           if  negocio.AltaFechaNoLab(lstFechasAux(i).Fechanolab,sMsgError) = False then 
               incorrectos += 1
               'grabar bitácora
           End If

         Next


         Return incorrectos 

  Catch ex As Exception
     'bitácora
      sMsgError = ex.Message 
      Return -1
  End Try


End Function 




Public Sub New()
     RUTAARCHIVO = CServicioLocalSQLServerDB.ObtenerRutaArchivoLiquidez ()
End Sub


Public Sub New(ByVal bDescartarCreacionMasiva As Boolean)
  
  If bDescartarCreacionMasiva = True then
        RUTAARCHIVO = ""
  else
        RUTAARCHIVO = CServicioLocalSQLServerDB.ObtenerRutaArchivoLiquidez ()
  End If

End Sub


End Class
